Skip to main content

1. 编程模型

一个 shader 由若干 warp 执行。warp 包含 32 个 lane,lane 具有自己的向量寄存器和 PC,共享 uniform 寄存器、控制状态和内存序列。向量操作按 EXEC 掩码逐 lane 执行;未在 EXEC 中的 lane 不读写目的向量寄存器,也不产生内存副作用。uniform/控制操作是 warp 级的,通常忽略 EXEC。除非指令标有 exec_ignored、reads_exec 或 writes_exec,向量指令默认受 EXEC 约束。

整数使用二补码,窄结果按指令后缀截断。浮点为 IEEE-754 binary32/binary64/binary16;NaN、无穷和次正规数行为受 MODE 控制。所有保留位必须为零,未定义编码解码为非法指令。

指令长度与 PC​

低位长度编码优先于 opcode:w0[0]=0 表示 32 位;w0[1:0]=01 表示 64 位;w0[1:0]=11 保留(v0.1 非法)。PC 按字节计数且始终 4 字节对齐,顺序执行时 PC 加 4 或 8。分支立即数按格式的 scale=4 解码为字节偏移,目标是当前指令地址加偏移。代码位于一个 4 GiB code heap 内,PC 是相对 CODE_BASE 的 32 位偏移。